
package com.asianrapid.demo.config;

import com.asianrapid.core.dao.DaoMapper;
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import tk.mybatis.spring.mapper.MapperScannerConfigurer;

import javax.sql.DataSource;
import java.util.Properties;

//import static net.justfood.apas.core.ProjectConstant.MAPPER_PACKAGE;
//import static net.justfood.apas.core.ProjectConstant.MODEL_PACKAGE;


/**
 * Mybatis & Mapper & PageHelper 配置
 */
//@Configuration
// @AutoConfigureAfter(OAuth2ServerConfiguration.class)
// @EnableTransactionManagement
public class MybatisConfigurer /* implements TransactionManagementConfigurer */ {
	//
	// @Autowired
	// DataSource dataSource;

	@Bean
	public SqlSessionFactory sqlSessionFactoryBean(DataSource dataSource) throws Exception {
		SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
		factory.setDataSource(dataSource);
//		factory.setTypeAliasesPackage(MODEL_PACKAGE);

		// 配置分页插件，详情请查阅官方文档
		PageHelper pageHelper = new PageHelper();
		Properties properties = new Properties();
		properties.setProperty("pageSizeZero", "true");// 分页尺寸为0时查询所有纪录不再执行分页
		properties.setProperty("reasonable", "true");// 页码<=0
														// 查询第一页，页码>=总页数查询最后一页
		properties.setProperty("supportMethodsArguments", "true");// 支持通过 Mapper
																	// 接口参数来传递分页参数
		pageHelper.setProperties(properties);

		// 添加插件
		factory.setPlugins(new Interceptor[] { pageHelper });

		// 添加XML目录
		ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
		factory.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));
		return factory.getObject();
	}

	@Bean
	public MapperScannerConfigurer mapperScannerConfigurer() {
		MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
		mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean");
//		mapperScannerConfigurer.setBasePackage(MAPPER_PACKAGE);

		// 配置通用Mapper，详情请查阅官方文档
		Properties properties = new Properties();
		properties.setProperty("mappers", DaoMapper.class.getName());
		properties.setProperty("notEmpty", "false");// insert、update是否判断字符串类型!=''
													// 即 test="str !=
													// null"表达式内是否追加 and str !=
													// ''
		properties.setProperty("IDENTITY", "MYSQL");
		mapperScannerConfigurer.setProperties(properties);

		return mapperScannerConfigurer;
	}
	//
	// @Override
	// public PlatformTransactionManager annotationDrivenTransactionManager() {
	// return new DataSourceTransactionManager(dataSource);
	// }

}
